<?php

namespace maotool\util;

use maotool\core\Container;
use maotool\core\Instance;
use maotool\exception\RuntimeException;
use maotool\object\StrUtil;

class ContainerUtil
{

    /**
     * 获取当前容器的实例（单例）
     * @return object $container
     */
    public static function getContainer()
    {
        return Container::getContainer();
    }

    /**
     * 设置当前容器的实例
     * @access public
     * @param $instance
     * @return void
     */
    public static function setContainer($instance)
    {
        Container::setContainer($instance);
    }

    /**
     * 获取容器中的对象实例
     * @access public
     * @param string $name
     * @return mixed
     */
    public static function get($name)
    {
        return Container::get($name);
    }

    /**
     * 获取容器中的对象实例
     * @param string $class
     * @param string|null $method
     * @return mixed
     */
    public static function getClass($class, $method = null)
    {
        return Container::getClass($class, $method);
    }

    /**
     * 获取容器中的对象实例
     * @access public
     * @param string $name
     * @return mixed
     */
    public static function getName($name)
    {
        return Container::getName($name);
    }

    /**
     * 绑定一个类、闭包、实例、接口实现到容器
     * * @param array $options 参数
     * * @return Instance
     */
    public static function set($options = [
        "concrete" => null, // 容器类
        "name" => null, // 容器名称
        "vars" => [], // 实例化的参数
        "remarks" => null, // 备注
        "init" => true, // 立即初始化
        "cover" => false, // 存在是否覆盖
        "newInstance" => false, // 是否每次调用都重新实例化
    ])
    {
        return Container::set($options);
    }

    /**
     * 获取容器中的对象实例
     * @param string $fatherClass
     * @return mixed
     */
    public static function getFatherClass($fatherClass)
    {
        return Container::getFatherClass($fatherClass);
    }

    /**
     * 获取容器中的对象实例通过接口类
     * @param string $fatherClass
     * @return array
     */
    public static function getFatherClasss($fatherClass)
    {
        return Container::getFatherClasss($fatherClass);
    }

}